"""
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例：

输入：1->2->4, 1->3->4
输出：1->1->2->3->4->4

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
"""


class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

    def __repr__(self):
        r = []
        node = self
        while node:
            r.append(str(node.val))
            node = node.next
        return "->".join(r)


class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        l3 = tmp = ListNode(0)
        while l1 and l2:
            if l1.val <= l2.val:
                tmp.next = l1
                l1 = l1.next
            else:
                tmp.next = l2
                l2 = l2.next
            tmp = tmp.next
        tmp.next = l1 if l1 else l2
        return l3.next


if __name__ == '__main__':
    tree1 = ListNode(1)
    tree1.next = ListNode(2)
    tree1.next.next = ListNode(4)
    print(tree1)
    tree2 = ListNode(1)
    tree2.next = ListNode(3)
    tree2.next.next = ListNode(4)
    print(tree2)
    s = Solution()
    print(s.mergeTwoLists(tree1, tree2))
